/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.agi.fs;

import java.io.IOException;

/**
 *
 * @author renatogrosz@yahoo.com - www.araujogrosz.com.br
 */
public enum EstadoArquivo {
    NOVO{
        @Override
        public EstadoArquivo abrir(){
            return(ABERTO_ESCRITA);
        }

        @Override
        public EstadoArquivo ler() throws IOException{
            throw new IOException("Nao posso ler arquivo fechado");
        }

        @Override
        public EstadoArquivo escrever() throws IOException{
            throw new IOException("Nao posso escrever arquivo fechado");
        }
        @Override
        public EstadoArquivo fechar() throws IOException{
            return(ABERTO_ESCRITA);
        }

    },
    ABERTO_ESCRITA{
        @Override
        public EstadoArquivo abrir() throws IOException{
            throw new IOException("Arquivo ja aberto");
        }

        @Override
        public EstadoArquivo ler() throws IOException{
            throw new IOException("Arquivo aberto para escrita");
        }

        @Override
        public EstadoArquivo escrever() throws IOException{
            return(ABERTO_ESCRITA);
        }

        @Override
        public EstadoArquivo fechar() throws IOException{
            return(FECHADO_ESCRITO);
        }
    },
    FECHADO_ESCRITO{
        @Override
        public EstadoArquivo abrir() throws IOException{
            return(ABERTO_LEITURA);
        }

        @Override
        public EstadoArquivo ler() throws IOException{
            throw new IOException("Arquivo fechado");
        }

        @Override
        public EstadoArquivo escrever() throws IOException{
            throw new IOException("Arquivo fechado");
        }

        @Override
        public EstadoArquivo fechar() throws IOException{
            return(ABERTO_ESCRITA);
        }
    },
    ABERTO_LEITURA{
        @Override
        public EstadoArquivo abrir() throws IOException{
            throw new IOException("Arquivo ja aberto");
        }

        @Override
        public EstadoArquivo ler() throws IOException{
            return(ABERTO_LEITURA);
        }

        @Override
        public EstadoArquivo escrever() throws IOException{
            throw new IOException("Arquivo aberto para leitura");
        }

        @Override
        public EstadoArquivo fechar() throws IOException{
            return(ABERTO_ESCRITA);
        }
    }
    ;

    public abstract EstadoArquivo abrir() throws IOException;
    public abstract EstadoArquivo ler() throws IOException;
    public abstract EstadoArquivo escrever() throws IOException;
    public abstract EstadoArquivo fechar() throws IOException;

}
